package Others.DesignPattern.SimpleFactoryPattern.Pattern;

import Others.DesignPattern.SimpleFactoryPattern.Pattern.Calculate.Operation;
import Others.DesignPattern.SimpleFactoryPattern.Pattern.CalculateSimpleFactory.CalculateSimpleFactory;
import cn.hutool.core.bean.BeanUtil;

import java.util.Scanner;

public class main {
    public static void main(String[] args) {
        //简单工厂模式

        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入运算符(+,-,*,/)：");
        String operation = scanner.next();
        Operation opera = CalculateSimpleFactory.createOperation(operation);
        if (BeanUtil.isEmpty(opera))
            System.out.println("输入错误,程序结束!");
        else {
            System.out.println("请输入第一个数字：");
            double num1 = scanner.nextDouble();
            System.out.println("请输入第二个数字：");
            double num2 = scanner.nextDouble();


            opera.setNumberA(num1);
            opera.setNumberB(num2);

            System.out.println("结果为：" + opera.getResult());
        }
        //两点好处：
        // 一，这样做采用了面向对象编程而非面向过程，使用到了java的核心特性（虽然Origin也是，只是我没有去写，面向过程编程罢了）
        // 二，通过简单工厂模式，将创建对象过程封装，将具体创建过程交给工厂类，将创建对象过程与使用对象过程解耦，从而提高系统的灵活性和可扩展性
        //这里优化了一些，对类的功能进行了解耦、独立，但是仍然改变不了操作的局限性--仍然有switch分支
        //想要改变switch分支就必须使用到反射的内容，后续或进行补充

    }
}
